/*—————————————————————————————————————————————————————————— 用户信息处理集合 ——————————————————————————————————————————————————————————*/

import { MemoryProcessing, base64EncryptionDecryption } from './index' // 引入内存处理类
import { longTimeUserInfo, keysOfStringOnObject } from './interface' // ts接口
import config from '@/common/config/config' // 公共配置信息

const { userInfo, tokeName, userSelectMenu, userOpenMenu } = config

// 用户登录信息存储
// ---------------------------------------------------------------------------------------------
// 进行长期存储用户登录信息
export const setLongTimeUser = (user: longTimeUserInfo) => {
  MemoryProcessing.setLocal(userInfo, base64EncryptionDecryption(user))
}

// 获取长期存储用户信息
// =========================================================================================
export const getLongTimeUser = () => {
  let user: unknown
  try {
    user = base64EncryptionDecryption(MemoryProcessing.getLocal(userInfo), 0)
  } catch (_) {
    return null
  }

  return user
}

// 删除长期存储用户信息
// =========================================================================================
export const removeTimeUser = () => {
  MemoryProcessing.removeLocal(userInfo)
}

// 用户Token操作
// ---------------------------------------------------------------------------------------------
// 获取token
export const getToken = () => MemoryProcessing.getSession(tokeName) as string

// 设置token
// =========================================================================================
export const setToken = (token: string) =>
  MemoryProcessing.setSession(tokeName, token)

// 删除用户登录信息
// =========================================================================================
// eslint-disable-next-line @typescript-eslint/ban-types
export const removeToken = (fn?: () => void) => {
  // 删除全部回话信息
  MemoryProcessing.removeAllSession()

  // 调用退出登录接口
  fn && fn()
}

// 用户导航菜单栏
// ---------------------------------------------------------------------------------------------
// 设置用户选中的菜单栏
export const setUserSelectMenu = (select: Array<string>) => {
  MemoryProcessing.setSession(userSelectMenu, select)
}

// 读取用户选中的菜单栏
// =========================================================================================
export const getUserSelectMenu = () =>
  MemoryProcessing.getSession(userSelectMenu)

// 设置用户展开的菜单栏
// =========================================================================================
export const setUserOpenMenu = (open: Array<string>) => {
  MemoryProcessing.setSession(userOpenMenu, open)
}

// 读取用户选中的菜单栏
// =========================================================================================
export const getUserOpenMenu = () => MemoryProcessing.getSession(userOpenMenu)

// 面包屑
// ---------------------------------------------------------------------------------------------
// 设置面包屑
export const setBreadcrumbNameMap = (map: keysOfStringOnObject) => {
  MemoryProcessing.setSession('BreadcrumbNameMap', map)
}

// 读取面包屑
// =========================================================================================
export const getBreadcrumbNameMap = () =>
  MemoryProcessing.getSession('BreadcrumbNameMap')
